/* eslint-disable */
export const getQueryString = (name) => {
    // var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
    // var r = window.location.search.substr(1).match(reg)
    // if (r != null) {
    //   return unescape(decodeURIComponent(r[2]))
    // }
    // return null
    if (name === 'zhangdan') {
        const queryArr = window.location.href.split('?')
        const zhangdanStr = queryArr[1]?.split('zhangdan=')[1]
        const str1 = decodeURIComponent(zhangdanStr)
        const str2 = decodeURIComponent(queryArr[2])
        const url = str1 + '?' + str2
        // console.log('url========>', url)
        return url
    }
    var query = ''
    var locationQuery = []
    var queryStr = decodeURIComponent(window.location.href.split('?')[1])
    if (!queryStr) return
    if (queryStr.indexOf('#')) {
        queryStr = queryStr.split('#')[0]
    }
    //   if (name === 'zhangdan') {
    //     const str = queryStr.split('zhangdan=')
    //     return str
    //   }
    locationQuery = queryStr.split('&')
    for (var i = 0; i < locationQuery.length; i++) {
        if (locationQuery[i].indexOf(name) > -1) {
            query = decodeURIComponent(locationQuery[i].split('=')[1])
        }
    }
    // console.log(query);
    return query
}
// 获取本地存储数据 __SYSWIN__storage 作为唯一键名防止第三方命名冲突
export const getLocalStorage = (name = '') => {
    //name为空直接返回
    if (!name) {
        return
    }
    let local = window.localStorage.getItem('__SYSWIN__storage')
    if (local) {
        try {
            local = JSON.parse(local)
        } catch (error) {
            console.error('json parse localstorage __SYSWIN__storage error')
        }
        return local[name] || ''
    } else {
        return ''
    }
}

// 是否在IOS中
export function isInIOS() {
    return /iPad|iPhone|iPod/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)
}
//设置本地存储数据 __SYSWIN__storage 作为唯一键名防止第三方命名冲突
export const setLocalStorage = (name, value) => {
    if (!name) {
        return
    }
    let local = window.localStorage.getItem('__SYSWIN__storage')
    if (local) {
        try {
            local = JSON.parse(local)
        } catch (error) {
            console.error('json parse localstorage __SYSWIN__storage error')
        }
        local[name] = value
    } else {
        local = {}
        local[name] = value
    }
    try {
        local = JSON.stringify(local)
    } catch (error) {
        console.error('json stringify localstorage __SYSWIN__storage error')
    }
    window.localStorage.setItem('__SYSWIN__storage', local)
}

// 判断是android还是IOS
export const androidOrIos = () => {
    let u = navigator.userAgent
    let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1 //g
    let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) //ios终端
    if (isAndroid) {
        return 'android'
    } else if (isIOS) {
        return 'ios'
    }
}
/// 定义一些常量
var x_PI = (3.14159265358979324 * 3000.0) / 180.0
var PI = 3.1415926535897932384626
var a = 6378245.0
var ee = 0.00669342162296594323

/**
 * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 / 即百度转谷歌、高德
 * @param { Number } bd_lon
 * @param { Number } bd_lat
 */
export function bd09togcj02(bd_lon, bd_lat) {
    var x_pi = (3.14159265358979324 * 3000.0) / 180.0
    var x = bd_lon - 0.0065
    var y = bd_lat - 0.006
    var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi)
    var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi)
    var gg_lng = z * Math.cos(theta)
    var gg_lat = z * Math.sin(theta)
    return [gg_lng, gg_lat]
}

/**
 * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换 / 即谷歌、高德 转 百度
 * @param { Number } lng
 * @param { Number } lat
 */
export function gcj02tobd09(lng, lat) {
    var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI)
    var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI)
    var bd_lng = z * Math.cos(theta) + 0.0065
    var bd_lat = z * Math.sin(theta) + 0.006
    return [bd_lng, bd_lat]
}

/**
 * WGS84坐标系转火星坐标系GCj02 / 即WGS84 转谷歌、高德
 * @param { Number } lng
 * @param { Number } lat
 */
export function wgs84togcj02(lng, lat) {
    if (outOfChina(lng, lat)) {
        return [lng, lat]
    } else {
        var dlat = transformlat(lng - 105.0, lat - 35.0)
        var dlng = transformlng(lng - 105.0, lat - 35.0)
        var radlat = (lat / 180.0) * PI
        var magic = Math.sin(radlat)
        magic = 1 - ee * magic * magic
        var sqrtmagic = Math.sqrt(magic)
        dlat = (dlat * 180.0) / (((a * (1 - ee)) / (magic * sqrtmagic)) * PI)
        dlng = (dlng * 180.0) / ((a / sqrtmagic) * Math.cos(radlat) * PI)
        const mglat = lat + dlat
        const mglng = lng + dlng
        return [mglng, mglat]
    }
}

/**
 * GCJ02（火星坐标系） 转换为 WGS84 / 即谷歌高德转WGS84
 * @param { Number } lng
 * @param { Number } lat
 */
export function gcj02towgs84(lng, lat) {
    if (outOfChina(lng, lat)) {
        return [lng, lat]
    } else {
        var dlat = transformlat(lng - 105.0, lat - 35.0)
        var dlng = transformlng(lng - 105.0, lat - 35.0)
        var radlat = (lat / 180.0) * PI
        var magic = Math.sin(radlat)
        magic = 1 - ee * magic * magic
        var sqrtmagic = Math.sqrt(magic)
        dlat = (dlat * 180.0) / (((a * (1 - ee)) / (magic * sqrtmagic)) * PI)
        dlng = (dlng * 180.0) / ((a / sqrtmagic) * Math.cos(radlat) * PI)
        const mglat = lat + dlat
        const mglng = lng + dlng
        return [lng * 2 - mglng, lat * 2 - mglat]
    }
}

/**
 * 百度坐标系转wgs84坐标系
 * @param {*} lng
 * @param {*} lat
 */
export function bd09towgs84(lng, lat) {
    // 百度坐标系先转为火星坐标系
    const gcj02 = bd09togcj02(lng, lat)
    // 火星坐标系转wgs84坐标系
    const result = gcj02towgs84(gcj02[0], gcj02[1])
    return result
}

/**
 * wgs84坐标系转百度坐标系
 * @param {*} lng
 * @param {*} lat
 */
export function wgs84tobd09(lng, lat) {
    // wgs84先转为火星坐标系
    const gcj02 = wgs84togcj02(lng, lat)
    // 火星坐标系转百度坐标系
    const result = gcj02tobd09(gcj02[0], gcj02[1])
    return result
}

/**
 * 经度转换
 * @param { Number } lng
 * @param { Number } lat
 */
function transformlat(lng, lat) {
    var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng))
    ret += ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0) / 3.0
    ret += ((20.0 * Math.sin(lat * PI) + 40.0 * Math.sin((lat / 3.0) * PI)) * 2.0) / 3.0
    ret += ((160.0 * Math.sin((lat / 12.0) * PI) + 320 * Math.sin((lat * PI) / 30.0)) * 2.0) / 3.0
    return ret
}

/**
 * 纬度转换
 * @param { Number } lng
 * @param { Number } lat
 */
function transformlng(lng, lat) {
    var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng))
    ret += ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0) / 3.0
    ret += ((20.0 * Math.sin(lng * PI) + 40.0 * Math.sin((lng / 3.0) * PI)) * 2.0) / 3.0
    ret += ((150.0 * Math.sin((lng / 12.0) * PI) + 300.0 * Math.sin((lng / 30.0) * PI)) * 2.0) / 3.0
    return ret
}

/**
 * 判断是否在国内，不在国内则不做偏移
 * @param {*} lng
 * @param {*} lat
 */
function outOfChina(lng, lat) {
    return lng < 72.004 || lng > 137.8347 || lat < 0.8293 || lat > 55.8271 || false
}
// 判断自己app环境
export function isPlusEnv() {
    return navigator.userAgent.indexOf('Html5Plus') > 0
}
export function loadGaodeMapScript(key) {
    const mapUrl = `https://webapi.amap.com/maps?v=2.0&key=${key}&callback=onMapCallback`
    return new Promise((resolve, reject) => {
        if (typeof AMap !== 'undefined') {
            resolve(AMap)
            return
        }
        // 高德地图异步加载回调处理
        window.onMapCallback = function () {
            console.log('高德地图脚本初始化成功...')
            resolve(AMap)
        }
        // 创建一个新的script标签
        const script = document.createElement('script')
        script.type = 'text/javascript'
        script.charset = 'utf-8'
        script.src = mapUrl
        // 将script标签添加到DOM中
        document.body.appendChild(script)
    })
}

// 高德转百度（火星坐标gcj02ll–>百度坐标bd09ll）
export function gaoDeToBaidu(gd_lon, gd_lat) {
    var PI = (3.14159265358979324 * 3000.0) / 180.0
    var x = gd_lon,
        y = gd_lat
    var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * PI)
    var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * PI)
    var bd_lng = z * Math.cos(theta) + 0.0065
    var bd_lat = z * Math.sin(theta) + 0.006
    return {
        lng: bd_lng,
        lat: bd_lat
    }
}

// 百度转高德（百度坐标bd09ll–>火星坐标gcj02ll）
export function baiduToGaoDe(lng, lat) {
    var X_PI = (Math.PI * 3000.0) / 180.0
    var x = lng - 0.0065,
        y = lat - 0.006
    var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * X_PI)
    var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * X_PI)
    var bd_lng = z * Math.cos(theta)
    var bd_lat = z * Math.sin(theta)
    return {
        lng: bd_lng,
        lat: bd_lat
    }
}

// 百度和高德经纬度互转
export function BaiduGaoDeLngLatConvert(objInfo, curType, type = 'building') {
    let { positionType } = objInfo
    if ([null, undefined, ''].includes(positionType)) {
        positionType = 1
    }
    if (positionType === curType) {
        return objInfo
    }
    // 百度转高德
    if (positionType === 1 && curType === 2) {
        if (type === 'building') {
            let buildingPosition = objInfo.buildingPosition
            if (buildingPosition) {
                let [lng, lat] = buildingPosition.split(',').map((x) => x * 1)
                let res = baiduToGaoDe(lng, lat)
                objInfo.buildingPosition = `${res.lng},${res.lat}`
            }
        } else if (type === 'location') {
            let { lng, lat } = objInfo
            let res = baiduToGaoDe(lng, lat)
            objInfo.lng = res.lng
            objInfo.lat = res.lat
        }
        objInfo.positionType = curType
    }
    // 高德转百度
    if (positionType === 2 && curType === 1) {
        if (type === 'building') {
            let buildingPosition = objInfo.buildingPosition
            if (buildingPosition) {
                let [lng, lat] = buildingPosition.split(',').map((x) => x * 1)
                let res = gaoDeToBaidu(lng, lat)
                objInfo.buildingPosition = `${res.lng},${res.lat}`
            }
        } else if (type === 'location') {
            let { lng, lat } = objInfo
            let res = gaoDeToBaidu(lng, lat)
            objInfo.lng = res.lng
            objInfo.lat = res.lat
        }
        objInfo.positionType = curType
    }
    return objInfo
}
// 转换数据结构方法
export const handleTreeData = (data) => {
    let types = JSON.parse(JSON.stringify(data.types))
    let options = JSON.parse(JSON.stringify(data.options))
    let count = 0
    while (types[count]) {
        types[count].children = []
        types[count].optionId = types[count].typeId
        types[count].label = types[count].typeName
        for (let i = 0; i < options.length; i++) {
            if (types[count].typeId === options[i].typeId) {
                options[i].label = options[i].optionName
                options[i].ptypeId = types[count].typeId
                options[i].labels = types[count].label
                delete options[i].typeId
                types[count].children.push(options[i])
            }
        }
        count++
    }
    types.sort((a, b) => {
        return a.sort - b.sort
    })
    // console.log(types);
    return types
}
export const formatDate = (date, fmt) => {
    //author: meizz
    if (!date) return '-'
    let o = {
        'M+': date.getMonth() + 1, //月份
        'd+': date.getDate(), //日
        'h+': date.getHours(), //小时
        'm+': date.getMinutes(), //分
        's+': date.getSeconds(), //秒
        'q+': Math.floor((date.getMonth() + 3) / 3), //季度
        S: date.getMilliseconds() //毫秒
    }
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
    for (let k in o) if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
    return fmt
}
export const formatDT=(timestamp)=> {
    if (!timestamp) return '-';
    const date = new Date(Number(timestamp));
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    return `${year}-${month}-${day}`;
}
export const setCookie = function(key, value, expiresHours) {
    let cookieString = key + "=" + value;
    if (expiresHours) {
        var date = new Date();
        date.setTime(date.getTime + expiresHours * 3600 * 1000);
        cookieString = cookieString + "; expires=" + date.toGMTString();
    }
    document.cookie = cookieString + "; path=/;";
};
export const getCookie = function(key) {
    var name = key + "=";
    var ca = document.cookie.split(";");
    for (var i = 0, len = ca.length; i < len; i++) {
        var c = ca[i];
        while (c.charAt(0) === " ") c = c.substring(1);
        if (c.indexOf(name) !== -1) return c.substring(name.length, c.length);
    }
    return "";
};
/**
 * 拆分地址为「街道」和「详细地址」
 * @param {string} address - 完整地址（格式：省+市+区+街道+详细地址）
 * @returns {Object} 包含街道和详细地址的对象
 */
export const splitStreetAndDetail=(address)=> {
    // 正则匹配「汉字+街道」（街道名称为汉字，结尾必为「街道」）
    const streetReg = /([\u4e00-\u9fa5]+街道)/;
    const matchResult = address.match(streetReg);

    if (matchResult) {
      const street = matchResult[1]; // 匹配到的街道（如「莲花街道」）
      const streetEndIndex = matchResult.index + street.length; // 街道在地址中的结束位置
      const detailAddress = address.slice(streetEndIndex).trim(); // 街道后的详细地址（去除首尾空格）
      return {
        street: street,
        detailAddress: detailAddress,
        success: true
      };
    } else {
      // 未匹配到「街道」关键词（兼容不标准地址）
      return {
        street: '',
        detailAddress: address,
        success: false,
        message: '未识别到「街道」层级，返回完整地址作为详细地址'
      };
    }
  }

export default {
    formatDT,
    handleTreeData,
    getQueryString,
    getLocalStorage,
    formatDate,
    setLocalStorage,
    setCookie,
    getCookie,
    splitStreetAndDetail,
}
